package com.inputabc.ct.v1.controller;

import com.inputabc.ct.v1.context.ContextParams;
import com.inputabc.ct.v1.service.TranslationService;
import com.inputabc.ct.v1.service.impl.TranslationServiceImpl;
import com.inputabc.ct.v1.setting.SettingContext;
import com.inputabc.ct.v1.setting.TranslateSetting;
import com.inputabc.ct.v1.ui.TextBox;
import com.inputabc.ct.v1.util.BaiduUtils;
import com.inputabc.ct.v1.util.DeepSeekUtils;
import com.inputabc.ct.v1.util.GoogleUtils;
import com.inputabc.ct.v1.util.QianfanUtils;
import com.inputabc.ct.v1.util.YoudaoUtils;

public class TextContentController {
    private TranslationService ts = new TranslationServiceImpl();
    private TranslateSetting translateSetting = SettingContext.translateSetting;

    public String getTranslatedContent(String content) throws Exception {
        String engine = translateSetting.getEngine();
        if ("youdao".equals(engine)) {
            if (content.length() > 200) {
                throw new RuntimeException("文本长度过长");
            }
        }
        
        // 获取翻译结果
        String translated = ts.translate(content);
        
        // 记录翻译历史
        recordTranslationHistory(content, translated);
        
        return translated;
    }
    
    /**
     * 记录翻译历史
     * @param sourceText 原文
     * @param targetText 译文
     */
    private void recordTranslationHistory(String sourceText, String targetText) {
        try {
            // 如果源文本或目标文本为空，不记录
            if (sourceText == null || sourceText.trim().isEmpty() || 
                targetText == null || targetText.trim().isEmpty()) {
                return;
            }
            
            // 如果翻译结果包含错误信息前缀，也不记录
            if (targetText.startsWith("（") && targetText.contains("API")) {
                return;
            }
            
            // 获取翻译方向
            String translationDirection = getTranslationDirection();
            
            // 获取翻译引擎
            String translationEngine = getTranslationEngineName();
            
            // 获取TextBox实例并添加记录
            TextBox textBox = (TextBox) ContextParams.contextParam.get("textBox");
            if (textBox != null) {
                textBox.addTranslationRecord(sourceText, targetText, translationDirection, translationEngine);
            }
        } catch (Exception e) {
            // 记录历史出错不影响主要功能
            e.printStackTrace();
        }
    }
    
    /**
     * 获取翻译方向描述
     */
    private String getTranslationDirection() {
        String source = translateSetting.getSource();
        String target = translateSetting.getTarget();
        String engine = translateSetting.getEngine();
        
        String sourceDesc = getLanguageDesc(source, engine);
        String targetDesc = getLanguageDesc(target, engine);
        
        return sourceDesc + " → " + targetDesc;
    }
    
    /**
     * 获取语言描述
     */
    private String getLanguageDesc(String langCode, String engine) {
        if ("youdao".equals(engine)) {
            if (YoudaoUtils.AUTO.equals(langCode)) return "自动检测";
            if (YoudaoUtils.CHINESE.equals(langCode)) return "中文";
            if (YoudaoUtils.ENGLISH.equals(langCode)) return "英文";
            if (YoudaoUtils.JPANESE.equals(langCode)) return "日文";
            if (YoudaoUtils.KOREAN.equals(langCode)) return "韩文";
        } else if ("baidu".equals(engine)) {
            if (BaiduUtils.AUTO.equals(langCode)) return "自动检测";
            if (BaiduUtils.CHINESE.equals(langCode)) return "中文";
            if (BaiduUtils.ENGLISH.equals(langCode)) return "英文";
            if (BaiduUtils.JPANESE.equals(langCode)) return "日文";
            if (BaiduUtils.KOREAN.equals(langCode)) return "韩文";
        } else if ("google".equals(engine)) {
            if (GoogleUtils.AUTO.equals(langCode)) return "自动检测";
            if (GoogleUtils.CHINESE.equals(langCode)) return "中文";
            if (GoogleUtils.ENGLISH.equals(langCode)) return "英文";
            if (GoogleUtils.JPANESE.equals(langCode)) return "日文";
            if (GoogleUtils.KOREAN.equals(langCode)) return "韩文";
        } else if ("deepseek".equals(engine)) {
            if (DeepSeekUtils.AUTO.equals(langCode)) return "自动检测";
            if (DeepSeekUtils.CHINESE.equals(langCode)) return "中文";
            if (DeepSeekUtils.ENGLISH.equals(langCode)) return "英文";
            if (DeepSeekUtils.JPANESE.equals(langCode)) return "日文";
            if (DeepSeekUtils.KOREAN.equals(langCode)) return "韩文";
            if (DeepSeekUtils.FRENCH.equals(langCode)) return "法文";
            if (DeepSeekUtils.GERMAN.equals(langCode)) return "德文";
            if (DeepSeekUtils.SPANISH.equals(langCode)) return "西班牙文";
            if (DeepSeekUtils.RUSSIAN.equals(langCode)) return "俄文";
        } else if ("qianfan".equals(engine)) {
            if (QianfanUtils.AUTO.equals(langCode)) return "自动检测";
            if (QianfanUtils.CHINESE.equals(langCode)) return "中文";
            if (QianfanUtils.ENGLISH.equals(langCode)) return "英文";
            if (QianfanUtils.JPANESE.equals(langCode)) return "日文";
            if (QianfanUtils.KOREAN.equals(langCode)) return "韩文";
            if (QianfanUtils.FRENCH.equals(langCode)) return "法文";
            if (QianfanUtils.GERMAN.equals(langCode)) return "德文";
            if (QianfanUtils.SPANISH.equals(langCode)) return "西班牙文";
            if (QianfanUtils.RUSSIAN.equals(langCode)) return "俄文";
        }
        
        return langCode; // 未知语言代码
    }
    
    /**
     * 获取翻译引擎名称
     */
    private String getTranslationEngineName() {
        String engine = translateSetting.getEngine();
        
        if ("youdao".equals(engine)) return "有道翻译";
        if ("baidu".equals(engine)) return "百度翻译";
        if ("google".equals(engine)) return "谷歌翻译";
        if ("deepseek".equals(engine)) return "DeepSeek AI";
        if ("qianfan".equals(engine)) return "百度千帆 AI";
        
        return engine; // 未知引擎
    }
}
